<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Alpha-欢迎您</title>
    <link rel="shortcut icon" href="../icon/title.ico"/>
    <link rel="stylesheet" href="../css/index.css">
    <link rel="stylesheet" href="../css/bootstrap3.3.7.min.css">

    <script src="../js/jquery-1.10.2.min.js"></script>
    <script src="../js/bootstrap3.3.7.min.js"></script>
    <script src="../js/index.js"></script>
    <style>
        a:hover{text-decoration: none;color:#000;}
        a{ text-decoration:none;}
        a:link {
            text-decoration: none;
        }
        .content{
            width: 80%;margin: auto}
        h3{
            width: 100%;text-align: center;}
        .xmp{color:#3d464d;;text-indent: 2em;}
        pre{line-height: 200%;font-size: 14px;}
        .p-content{
            text-indent:2em;letter-spacing:2px;}
    </style>
    <script>

    </script>
</head>
<body>

<div class="warp">
    <div>
        <h1><a href="../index.html">Alpha</a></h1>
    </div>
    <nav class="navbar navbar-default" role="navigation">
        <div class="container-fluid">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse"
                        data-target="#example-navbar-collapse">
                    <span class="sr-only">切换导航</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="#"></a>
            </div>
            <div class="collapse navbar-collapse" id="example-navbar-collapse">
                <ul class="nav navbar-nav">
                    <li class="active"><a href="#">javascript</a></li>
                    <li><a href="#">css</a></li>
                    <li><a href="#">jquery</a></li>
                    <li><a href="#">angular</a></li>
                    <li><a href="#">其他</a></li>
                </ul>
            </div>
        </div>
    </nav>
    <div class="img">
        <img src="../images/javaScript.png" style=";height: 300px;background:#ccc;" alt="">
    </div>
    <hr>
    <!--返回顶部箭头-->
    <div id="top" style="width: 50px;height: 50px;background-color: #999;position: fixed;right: 50px;bottom:50px;text-align: center;line-height: 50px;display: none;">
        <b>
            <a style="text-decoration:none;color:#fff;;" href="javascript:;">顶部</a>
        </b>
    </div>
<!--content主要内容-->
    <div class="content">
        <h3>事件委托</h3>
        <div>
            <h4><b>1.什么是事件委托:</b></h4>
            <p class="p-content">就是自己想要做的事，让别人来实现;委托给别人来完成;事件委托就是利用事件冒泡，
                只指定一个事件处理程序，就可以管理某一类型的所有事件.</p>

            <h4>2.为什么要用事件委托：</h4>
            <p class="p-content">
                事件委托主要是处理多个相同事件的元素;比如我们有100个li，
                每个li都有相同的click点击事件，可能我们会用for循环的方法，来遍历（循环）所有的li，然后给它们添加事件.
                添加到页面上的事件处理程序数量将直接关系到页面的整体运行性能，因为需要不断的与dom节点进行交互，
                访问dom的次数越多，引起浏览器重绘与重排的次数也就越多;每个函数都是一个对象，是对象就会占用内存，
                对象越多，内存占用率就越大，自然性能就越差了。
            </p>

            <h4><b>2.事件委托原理：</b></h4>
            <p class="p-content">
                事件委托是利用事件的冒泡原理来实现的，就是事件从最深的节点开始，然后逐步向上传播事件，
                举个例子：页面上有这么一个节点树，div>ul>li>a;比如给最里面的a加一个click点击事件，
                那么这个事件就会一层一层的往外执行，执行顺序a>li>ul>div，有这样一个机制，
                那么我们给最外面的div加点击事件，那么里面的ul，li，a做点击事件的时候，都会冒泡到最外层的div上，
                所以都会触发，这就是事件委托，委托它们父级代为执行事件。
            </p>

            <h4><b>3.事件委托用法：</b></h4>
            <p class="p-content">
            <pre>
            window.onload = function(){
　          var oUl = document.getElementById("ul1");
　　          oUl.onclick = function(ev){
            //做浏览器兼容问题
　　　　        var ev = ev || window.event;
            //标准浏览器用ev.target，IE浏览器用event.srcElement;target:返回触发事件源目标节点
　　　　        var target = ev.target || ev.srcElement;
            //nodeName:返回元素标签名:返回值是大写,如:LI;toLowerCase():将内容转换成小写;
　　　　        if(target.nodeName.toLowerCase() == 'li'){
　 　　　　　　	   alert(123);
　　　　        }
　　            }
            }
</pre>
            <p class="p-content">Event对象提供了一个属性叫target，可以返回事件的目标节点，我们成为事件源，
                也就是说，target就可以表示为当前的事件操作的dom，但是不是真正操作dom，当然，
                这个是有兼容性的，标准浏览器用ev.target，IE浏览器用event.srcElement，
                此时只是获取了当前节点的位置，并不知道是什么节点名称，
                这里我们用nodeName来获取具体是什么标签名，这个返回的是一个大写的，我们需要转成小写再做比较</p>
            </p>
        </div>
        <div>4.jquery的事件委托：</div>
        <pre>
            //on("事件名","指定元素事件源"，函数)
        $("obj").on("click","li",function(){
                    alert(1)
                });

        </pre>
    </div>
    <hr>
    <div class="footer">
        <div>
            <img src="" alt="">
            <img src="" alt="">
            <img src="" alt="">
            <img src="" alt="">
            <img src="" alt="">
            <img src="" alt="">
        </div>
        <div class="footer-bottom">
            <p>这是一段内容</p>
        </div>
    </div>
</div>

</body>
</html>
<script>
    window.addEventListener('scroll', function () {
        var oTop=document.getElementById('top');
        var oH=document.documentElement.clientHeight;
        var oS=document.body.scrollTop;
        if(oH+oS>oH){
            oTop.style.display="block";

        }else {
            oTop.style.display="none";
        }
        oTop.onclick= function () {
            var timer=null;
            clearInterval(timer);
            timer=setInterval(function () {
                document.body.scrollTop=(oS*=0.8);
                if (oS<=1){
                    oS=0;
                    clearInterval(timer);
                    oTop.style.display="none";
                    //alert(oS)
                }
            },30)
        }
    },false);
</script>